import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * La Clase Enemigo provee de variables y metodos que te permiten crear enemigos de
 * diferentes tipos actuando de diferente manera cada uno.
 * 
 * @author Jose Luis Sandoval Quintero
 * @version 5-Junio-2012
 */
public abstract class Enemigo extends Actor
{
    protected int nPegadas = 0; //Numero de pegadas que spiderman te a dado.
    protected int n; // Variable aleatoria para saber cuando se debe lanzar una bomba
    protected int n2; // Variable aleatoria para saber cuando debe girar un enemigo
    protected boolean eliminado = false; //Bandera que indica cuando el enemigo a sido eliminado
    
    /**
     * genera numeros aleatorios y los guarda en n y n2.
     * Checa cuando se a chocado con spiderman para disminuir las vidas del jugador.
     */
    public void act()
    {
        n = Greenfoot.getRandomNumber( 10000 );
        n2 = Greenfoot.getRandomNumber( 90 );
        if( this.chocoConSpiderman() )
        {
            SpidermanWorld mundo = (SpidermanWorld)getWorld();
            Spiderman spiderman = dameSpiderman();
            spiderman.setLocation( 82, 219 );
            mundo.cambiaNvidas( mundo.dameNvidas( ) -1 );
            spiderman.cambialanzoTelarana( false );
            mundo.removeObjects( mundo.getObjects( Telarana.class ) );
        }
    }
    /**
     * Regresa true si se a intersectado con spiderman,
     * de lo contrario regresa false.
     */
    public boolean chocoConSpiderman()
    {
        boolean res = false;
        Actor spiderman = getOneIntersectingObject( Spiderman.class );
        if( spiderman != null )
            res = true;
        return res;
    }
    /**
     * Regersa un actor de tipo spiderman
     */
    public Spiderman dameSpiderman()
    {
        Actor spiderman = getOneIntersectingObject( Spiderman.class );
        return (Spiderman)spiderman;
        
    }
    /**
     * cambia el numero de pegadas del enemigo, las aumenta en una unidad.
     */
    public void cambiaNpegadas()
    {
        nPegadas++;
    }
    /**
     * Regersa true si es alguna de las extremidades de la pantalla del jeugo.
     * de lo contrario regresa false.
     */
    public boolean esPared()
    {
        boolean res = false;
        if( super.getX() == 0 || super.getX() == super.getWorld().getWidth() - 1 ||
            super.getY() == 0 || super.getY() == super.getWorld().getHeight() - 1)
            res = true;
        return res;
    }
    /**
     * todos los enemigos saben como moverse pero se mueven de forma diferente.
     */
    public abstract void muevete();
    /**
     * todos los enemigos lanzan una bomba pero lo hacen de forma diferente.
     */
    public abstract void lanzaBomba();
}
